package com.autoboot.mapper;

import com.autoboot.domain.DynamicEntity;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 动态表Mapper接口
 * @author Maosw
 */
@Mapper
public interface DynamicTableMapper extends BaseMapper<DynamicEntity> {

    /**
     * 根据表名和条件查询列表
     */
    List<Map<String, Object>> selectListByTable(@Param("tableName") String tableName,
                                                @Param("ew") QueryWrapper<DynamicEntity> queryWrapper);

    /**
     * 分页查询
     */
    IPage<Map<String, Object>> selectPageByTable(IPage<Map<String, Object>> page,
                                                @Param("tableName") String tableName,
                                                @Param("ew") QueryWrapper<DynamicEntity> queryWrapper);

    /**
     * 执行自定义SQL查询
     */
    List<Map<String, Object>> executeQuery(@Param("sql") String sql,
                                          @Param("params") Map<String, Object> params);
    IPage<Map<String, Object>> executePage(@Param("sql") String sql,
                                          @Param("params") Map<String, Object> params,
                                          @Param("page") IPage<Map<String, Object>> page);

    /**
     * 执行自定义SQL插入
     */
    int executeInsert(@Param("sql") String sql,
                     @Param("params") Map<String, Object> params);

    /**
     * 执行自定义SQL更新
     */
    int executeUpdate(@Param("sql") String sql,
                     @Param("params") Map<String, Object> params);

    /**
     * 执行自定义SQL删除
     */
    int executeDelete(@Param("sql") String sql,
                     @Param("params") Map<String, Object> params);

    /**
     * 获取表结构信息
     *
     * @param tableName 表名
     * @return 表结构信息列表
     */
    List<Map<String, Object>> getTableStructure(@Param("tableName") String tableName);
}
